/**************************************** * Seg 2501, hiver 2002 Devoir # 4 * * Fichier : FileClient.java * simule les files d'attente des clients * les opérations possibles sur ces files * * @author Anne Bertrand * @author Robin Tropper * @refactoredBy Robin Tropper B.Sc.A. * *****************************************/ import java.util.*; public class FileClient{ private Vector fileAttente = new Vector(); private String nom; private long heureArrive=0, duree=0, tAttente=0; private long tTotal=0, clientsServis=0; private long tEnFile=0, execution=0; private int delta=0, moyenne=0, i=0; private Timer arriveClient; public FileClient(int moy, int del, Timer arCl, long dur, String nomFile) { moyenne = moy; delta = del; arriveClient = arCl; nom = nomFile; duree = dur; try { tEnFile = GenerateurR.generer(moyenne, delta); execution += tEnFile; ajouteClient(); }//terminera tout seul après le temps nécessaire catch (Exception ex) { System.out.println("Problême à l'ajout d'un/e: "+nom+"\n\t"+ ex); }//fin du try-catch pour ajouter }//fin constructeur private void ajouteClient(){ //la banque ferme! if( Banque.getCloture() ){ return; } try { i++; System.out.println("Ajouter client " + nom +" " + i); heureArrive = System.currentTimeMillis(); fileAttente.addElement(new Client(heureArrive,nom+i)); } catch (Exception ex) { System.out.println("Problême à l'ajout d'Individu: "+"\n\t"+ ex); }//fin du try-catch pour ajouter // prévoir le prochain client à venir tEnFile = GenerateurR.generer(moyenne, delta); execution += tEnFile; arriveClient.schedule(new ajouterClient(), execution); }//fin ajouteClient /** * Servir un client implique sortir un client de la file. * @return : le prochain client en attente dans la file OU * null si la file est vide. */ public synchronized Client Servir(){ Client bonhomme = null; if(fileAttente.size()!=0) { clientsServis++; bonhomme = (Client)(fileAttente.remove(0)); tAttente += bonhomme.getAttente(); tTotal += tAttente+bonhomme.getTempsAServir(); }//fin du if size return bonhomme; }//fin de la méthode Servir public String getNom() { return nom; } public int SizeFile() { return fileAttente.size(); } public long getClientsServis() { return clientsServis; } public long Temps() { return tTotal; } public long getMoyAttente() { long retour=0; if (clientsServis!=0) { retour = (tAttente/10)/clientsServis; } return retour; }//fin de getMoyAttente class ajouterClient extends TimerTask { public void run() { ajouteClient(); }//fin du run }//fin de classe ajouterClient }//fin de classe FileClient